import { enterDoor, leaveDoor } from './doors';
import * as spritejs from 'spritejs'
const { Scene, Sprite, Polyline, Rect, Label } = spritejs

// 判断是否碰到了停车场的墙


export const isHitWall = function (
    car: InstanceType<typeof Sprite>,
    offsetX: number,
    key: 'ArrowUp' | 'ArrowDown'
) {
    // 获取车子左上角
    const { left, right } = car.getBoundingClientRect();
    const [x, y] = car.attr('pos');
    // 获取角度
    const rotate = car.attr('rotate') % 360;
    // 根据角度计算出车子面向垂直线的左边还是右边
    // 面向左边是在 -180~0 || 180~360
    const isLeft = (rotate >= -180 && rotate <= 0) || rotate >= 180;

    // 中心在停车场内
    if (x > 300) {
        // 如果是往前开，并且方向向左，那么左边加偏移后小于300，说明撞墙了
        if (key === 'ArrowUp' && isLeft && left + offsetX < 300) {
            // 出口特判，如果门开着，那么可以出去
            if (leaveDoor &&
                leaveDoor.attr('rotate') !== 0 &&
                y > 0 &&
                y < 100) {
                return false;
            }

            return true;
        }
        // 如果是往后开，并且方向向右，那么左边减偏移后小于300，说明撞墙了
        if (key === 'ArrowDown' && !isLeft && left - offsetX < 300) return true;
    } else {
        // 中心在停车场外
        // 如果是往前开，并且方向向右，那么右边加偏移后大于300，说明撞墙了
        if (key === 'ArrowUp' && !isLeft && right + offsetX > 300) {
            // 入口特判，如果门开着，那么可以进入
            if (enterDoor &&
                enterDoor.attr('rotate') !== 0 &&
                y > 100 &&
                y < 200) {
                return false;
            }
            return true;
        }
        // 如果是往后开，并且方向向左，那么右边减偏移后大于300，说明撞墙了
        if (key === 'ArrowDown' && isLeft && right - offsetX > 300) return true;
    }

    return false;
};
